home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
NEW
/
A-Newest
/
TORPET.d64
/
graphic routines
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2009-10-12
|
6KB
|
170 lines
0 REM ***CHANGE SCREEN COLOR***
1 REM ***PRINT WAIT MESSAGE ***
2 POKE 53280,11:POKE 53281,0
4 PRINT"[152][147]CLEARING HIGH RES SCREEN . . "
6 PRINT"PLEASE WAIT 35 SECONDS"
7 PRINT"[218][216] COMMODORE-64 HI-RESOLUTION DEMO [193][211]"
8 REM *** CLEAR HI-RES SCREEN ***
10 FOR I=8192 TO 16192:POKE I,0:NEXT
13 REM *** SET UP POWERS OF 2 TABLE ***
14 REM *** FOR ROUTINES 4 & 5 ***
16 FOR I=0 TO 7:P(I)=2^(7-I):P1(I)=255-P(I):NEXT
17 REM *** START HI-RES MODE AND ***
18 REM *** SET HI-RES SCREEN AT 8192 ***
20 PRINT"[147]":POKE 53265,PEEK(53265)OR32:POKE 53272,PEEK(53272)OR8
25 REM *** SET HI-RES COLORS ***
26 REM ***UPPER NYBBLE FOR "1" BITS***
27 REM ***LOWER NYBBLE FOR "0" BITS***
30 FOR I=1024 TO 2023:POKE I,192:NEXT
100 REM ***PRINT STRINGS USING***
101 REM *** ROUTINE 1 ***
102 L=0:R=0:X=0:Y=13:B1=53248:O=1:B$="-2[255][157][157][145][157][199]":GOSUB 10000
103 X=20:Y=13:B$="0":GOSUB 10000
104 X=37:Y=13:B$="[145][217][157][157][157]+2[255]":GOSUB 10000
105 X=19:Y=3:B$="[198]+1":GOSUB 10000
106 X=19:Y=21:B$="[196]-1":GOSUB 10000
107 R=1:X=1:Y=23:B$="[218][216] COMMODORE-64 [200]I-[210]ESOLUTION [196]EMO [142][193][211]":GOSUB 10000
108 REM *** PRINT AXIS USING ***
109 REM *** ROUTINE 3 ***
110 X1=0:Y1=100:X2=319:Y2=100:GOSUB 30000
113 REM *** PRINT AXIS USING ***
114 REM *** ROUTINE 4 ***
115 FOR Y=25 TO 174:X=158:GOSUB 1000:X=157:GOSUB 1000:NEXT
116 REM *** GET USER INPUT WITH ***
117 REM *** ROUTINE 2 ***
120 BL=1:X=0:Y=0:R=0:B$="INPUT PERIOD ? ":GOSUB 20000:J=VAL(I$)
125 REM *** PLOT SINE CURVE ***
126 REM *** USING ROUTINE 4 ***
130 FOR X=0 TO 319:Z=SIN((X-158)/25*J):Y=INT(100-70*Z*Z*Z):GOSUB 1000:NEXT
131 REM *** LABEL PLOT WITH INPUT ***
132 REM *** USING ROUTINE 1 ***
133 L=1:R=0:X=4:Y=1:B$="Y=[142]SIN[145]3(":GOSUB 10000
134 B$=I$:GOSUB 10000:B$="*X)":GOSUB 10000
137 REM *** PAUSE LOOP: WHEN "A" ***
138 REM *** IS RECEIVED GO BACK ***
139 REM *** TO STANDARD MODE ***
140 REM *** AND STOP ***
145 GET A$:IF A$="" THEN 145
150 POKE 53265,PEEK(53265)AND223:PRINT"[147]";:POKE 53272,PEEK(53272)AND21:END
982 :
984 :
990 REM *** ROUTINES 4 & 5 ***
992 REM *** FOR PLOTTING AND ***
994 REM *** UNPLOTTING POINTS ***
996 REM *** SEE REF. GUIDE PG 125 ***
997 :
1000 B=INT(Y/8)*320+INT(X/8)*8+(YAND7)+8192:POKE B,PEEK(B)ORP(XAND7):RETURN
1001 B=INT(Y/8)*320+INT(X/8)*8+(YAND7)+8192:POKE B,PEEK(B)ANDP1(XAND7):RETURN
9980 :
9982 :
9990 REM *** ROUTINE 1: FOR PRINTING ***
9992 REM *** STRINGS IN HI- RES ***
9993 :
9994 REM *** DISABLE INTERRUPTS & ***
9996 REM *** SWITCH IN CHAR ROM ***
9998 REM *** CALCULATE CHAR BASE ***
10000 POKE 56334,PEEK(56334)AND254:POKE 1,PEEK(1)AND251:B2=B1+R*1024+L*2048
10010 REM *** GET A CHARACTER ***
10012 REM *** FROM INPUT STRING ***
10020 FOR I=1 TO LEN(B$):C=ASC(MID$(B$,I,1))
10026 REM *** SPECIAL CHARACTERS ***
10028 REM *** DECODING SECTION ***
10030 IF C=145 THEN Y=Y-1:NEXT:RETURN:REM ** CURSOR UP **
10040 IF C=17 THEN Y=Y+1:NEXT:RETURN:REM ** CURSOR DOWN **
10050 IF C=29 THEN X=X+1:NEXT:RETURN:REM ** CURSOR RIGHT **
10060 IF C=157 THEN X=X-1:NEXT:RETURN:REM ** CURSOR LEFT **
10070 IF C=18 THEN R=1:B2=B1+1024+L*2048:NEXT:RETURN:REM ** REVERSE ON **
10080 IF C=146 THEN R=0:B2=B1+L*2048:NEXT:RETURN:REM ** REVERSE OFF **
10090 IF C=19 THEN X=0:Y=0:NEXT:RETURN:REM ** CURSOR HOME **
10100 IF C=14 THEN L=1:B2=B1+R*1024+2048:NEXT:RETURN:REM ** START LOWER CASE **
10120 IF C=142 THEN L=0:B2=B1+R*1024:NEXT:RETURN:REM ** STOP LOWER CASE **
10130 IF C=255 THEN C=126:REM ** "[255]" IS SPECIAL CASE **
10132 REM *** TRANSLATE CHR$ CODES ***
10134 REM *** TO SCREEN CODES: CHARS ***
10136 REM *** PATTERNS IN ROM STORED ***
10138 REM *** BY SCREEN CODE ***
10140 ON C/32+1 GOTO 10150,10200,10170,10160,10150,10170,10190,10170
10150 C=32:GOTO 10200
10160 C=C-32:GOTO 10200
10170 C=C-64:GOTO 10200
10180 C=C-96:GOTO 10200
10190 C=C-128
10192 REM *** CALCULATE STARTING POS ***
10194 REM *** FOR STRING AND CHAR ***
10196 REM *** DEFINITION ***
10200 Z=Y*320+X*8+8192:C=C*8+B2
10220 REM *** POKE DEFINITION INTO ***
10222 REM *** HI-RES LOCATION ***
10240 FOR J=0 TO 7:POKE Z+J,(O*PEEK(Z+J))ORPEEK(C+J):NEXT:X=X+1:NEXT
10260 REM *** RE-ENABLE INTERRUPTS ***
10262 REM *** AND SWITCH OUT ROM ***
10290 POKE 1,PEEK(1)OR4:POKE 56334,PEEK(56334)OR1:RETURN
19880 :
19882 :
19900 REM *** ROUTINE 2-USER INPUT ***
19901 :
19902 REM *** INITIALIZE INPUT STRING ***
19904 REM *** SAVE START POSITION AND ***
19906 REM *** LENGTH OF PROMPT ***
20000 I$="":HX=X:HY=Y:HB=LEN(B$):GOSUB 10000
20008 REM *** GET A CHAR ***
20010 GET B$:IF B$="" THEN 20010
20014 REM *** CHECK FOR SPECIAL CHARS ***
20016 REM *** ONLY FIRST TWO ARE ***
20018 REM ***DIFFERENT FROM ROUTINE 1 ***
20020 IF B$=CHR$(13) THEN 20070:REM *** RETURN ***
20030 IF B$=CHR$(20) THEN 20045:REM *** DELETE ***
20031 IF B$=CHR$(145) THEN 20041
20032 IF B$=CHR$(17) THEN 20041
20033 IF B$=CHR$(29) THEN 20041
20034 IF B$=CHR$(157) THEN 20041
20035 IF B$=CHR$(18) THEN 20041
20036 IF B$=CHR$(146) THEN 20041
20037 IF B$=CHR$(19) THEN 20041
20038 IF B$=CHR$(14) THEN 20041
20039 IF B$=CHR$(142) THEN 20041
20040 REM *** ECHO CHARACTER ***
20041 GOSUB 10000
20042 I$=I$+B$:GOTO 20010
20043 REM *** DELETE KEY: DONT DELETE ***
20044 REM *** IF NOTHING THERE ***
20045 IF LEN(I$)=0 THEN 20010
20046 REM *** MOVE BACK AND BLANK ONE ***
20047 REM *** CHAR; UPDATE INPUT ***
20050 X=X-1:Z=Y*320+X*8+8192:FOR I=0 TO 7:POKE Z+I,0:NEXT:I$=LEFT$(I$,LEN(I$)-1)
20058 REM *** GET NEXT CHAR ***
20060 GOTO 20010
20066 REM *** BLANK INPUT IF DESIRED ***
20068 REM *** ELSE RETURN ***
20070 IF BL=0 THEN RETURN
20074 REM *** STARTING ADDRESS FOR ***
20076 REM *** BLANKING AND BLANKING ***
20078 REM *** LOOP ***
20080 Z=320*HY+8*HX+8192:FOR I=0 TO (HB+LEN(I$))*8:POKE Z+I,0:NEXT:RETURN
29880 :
29882 :
29900 REM *** ROUTINE 3 ***
29902 REM *** DRAW A LINE ***
29903 :
29904 REM *** CALCULATE SLOPE AND ***
29906 REM *** DECIDE WHETHER TO ***
29908 REM *** INCREMENT X OR Y ***
30000 XD=X1-X2:YD=Y1-Y2
30010 IFXD=0THEN30200
30020 IFYD=0THEN30300
30030 M=YD/XD:S=Y1-M*X1
30040 IFABS(M)<=.5THEN30400
30050 M=XD/YD:S=X1-M*Y1
30060 REM *** CALCULATE X ***
30062 REM *** STEP ALONG Y ***
30100 FORY=Y1TOY2STEPSGN(Y2-Y1):X=M*Y+S:GOSUB1000:NEXT:RETURN
30160 REM *** VERTICAL LINE ***
30162 REM *** STEP ALONG Y ***
30200 X=X1:FORY=Y1TOY2STEPSGN(Y2-Y1):GOSUB1000:NEXT:RETURN
30260 REM *** HORIZONTAL LINE ***
30262 REM *** STEP ALONG X ***
30300 Y=Y1:FORX=X1TOX2STEPSGN(X2-X1):GOSUB1000:NEXT:RETURN
30360 REM *** CALCULATE Y ***
30362 REM *** STEP ALONG X ***
30400 FORX=X1TOX2STEPSGN(X2-X1):Y=M*X+S:GOSUB1000:NEXT:RETURN